home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DBASE_UT / TPDB335 / TPDBSTR.PAS < prev    next >
Pascal/Delphi Source File  |  1993-11-26  |  6KB  |  217 lines

  1. unit TPDBStr;
  2.  
  3.                            (***********************************)
  4.                            (*               TPDB              *)
  5.                            (***********************************)
  6.                            (*         Object -Oriented        *)
  7.                            (*    Borland/Turbo Pascal Units   *)
  8.                            (*    for Accessing dBASE III      *)
  9.                            (*             files.              *)
  10.                            (*      Copyright 1988 - 1993      *)
  11.                            (*          Brian Corll            *)
  12.                            (*       All Rights Reserved       *)
  13.                            (***********************************)
  14.                            (*            FREEWARE             *)
  15.                            (***********************************)
  16.                            (*     dBASE is a registered       *)
  17.                            (* trademark of Borland Int. Inc.  *)
  18.                            (*   Version 3.35  November, 1993  *)
  19.                            (***********************************)
  20.                            (*   Portions Copyright 1984,1991  *)
  21.                            (*    Borland International Corp.  *)
  22.                            (***********************************)
  23. interface
  24.  
  25. const
  26. {Tables for translating foreign characters into English
  27.     characters during sorting and indexing.}
  28.     ForTable = 'ÇüéâäàåçêëèïîìÄÅÉæÆôöòùÿÖ܃íóúñÑ';
  29.     EngTable = 'CueaaaaceeeiiiAAEefooouyOUfiounN';
  30.  
  31. type
  32.     TslTable = string;
  33.     DBKey = string [254];
  34.  
  35. function For2Eng(StrToConvert: string; TslTable1, TslTable2: TslTable): DBKey;
  36. {Translates any string using a specified translation table.
  37.     Intended for use with ForTable and EngTable, declared above, for
  38.     translating extended ASCII characters to normal alphabetic characters
  39.     for indexin and sorting, but will work with any user-defined
  40.     translation tables.}
  41.  
  42. function Substr(BigStr: string; Start, Len: byte): string;
  43. {Same as dBASE's Substr function.}
  44.  
  45. function ReverseStr(StrToReverse: string): string;
  46. {Reverses the order of characters in a string.}
  47.  
  48. function JustL(InpStr: string; FieldLen: integer): string;
  49. {Left justify a string.}
  50.  
  51. function Lower(InpStr: string): string;
  52.  
  53. function LTrim(InpStr: string): string;
  54. {Trim leading blanks from a string.}
  55.  
  56. function PadL(InpStr: string; FieldLen: integer): string;
  57. {Pad a string with blanks on the left.}
  58.  
  59. function PadR(InpStr: string; FieldLen: integer): string;
  60. {Pad a string with blanks on the right.}
  61.  
  62. function Replicate(Ch: char; Count: word): string;
  63. {Create a string of a specified number of a character.}
  64.  
  65. function RTrim(InpStr: string): string;
  66. {Trim trailing blanks from a string.}
  67.  
  68.  
  69. function Upper(InpStr: string): string;
  70. {Convert a string to upper case.}
  71.  
  72. implementation
  73. {$F+}
  74. {All string functions are far calls for use in indexing and sorting.}
  75.  
  76. function For2Eng(StrToConvert: string; TslTable1, TslTable2: TslTable): DBKey;
  77.  
  78. var
  79.     OutStr: string;
  80.     I: byte;
  81.     OutChar: char;
  82.  
  83. procedure ScanTable;
  84.  
  85. var
  86.     J: byte;
  87.  
  88. begin
  89.     for J := 1 to Length(TslTable1) do
  90.         if StrToConvert[I] = TslTable1[J] then begin
  91.             OutChar := TslTable2[J];
  92.             Exit;
  93.         end else
  94.             OutChar := StrToConvert[I];
  95. end;
  96.  
  97. begin
  98.     OutStr := '';
  99.     for I := 1 to Length(StrToConvert) do begin
  100.         ScanTable;
  101.         OutStr := OutStr + OutChar;
  102.     end;
  103.     For2Eng := OutStr;
  104. end;
  105.  
  106. function Substr(BigStr: string; Start, Len: byte): string;
  107.  
  108. var
  109.     OutStr: string;
  110.  
  111. begin
  112.     OutStr := Copy(BigStr, Start, Len);
  113.     Substr := OutStr;
  114. end;
  115.  
  116. function ReverseStr(StrToReverse: string): string;
  117.  
  118. var
  119.     OutStr: string;
  120.     I: byte;
  121.  
  122. begin
  123.     OutStr := '';
  124.     for I := Length(StrToReverse) downto 1 do
  125.         OutStr := OutStr + StrToReverse[I];
  126.     ReverseStr := OutStr;
  127. end;
  128.  
  129.  
  130.  
  131. function JustL(InpStr: string; FieldLen: integer): string;
  132.  
  133. begin
  134.     JustL := PadR(LTrim(InpStr), FieldLen)
  135. end;
  136.  
  137. function LTrim(InpStr: string): string;
  138.  
  139. var
  140.     i, len: integer;
  141.  
  142. begin
  143.     len := Length(InpStr);
  144.     i := 1;
  145.     while (i <= len) and (InpStr[i] = ' ') do
  146.         i := i + 1;
  147.     LTrim := Copy(InpStr, i, len - i + 1)
  148. end;
  149.  
  150.  
  151. function PadL(InpStr: string; FieldLen: integer): string;
  152.  
  153. var
  154.     STemp: string;
  155.     i: integer;
  156.  
  157. begin
  158.     if FieldLen >= SizeOf(InpStr) then
  159.         FieldLen := SizeOf(InpStr) - 1;
  160.     if Length(InpStr) > FieldLen then
  161.         PadL := Copy(InpStr, 1, FieldLen)
  162.     else begin
  163.         STemp := InpStr;
  164.         for i := Length(STemp) + 1 to FieldLen do
  165.             Insert(' ', STemp, 1);
  166.         PadL := STemp
  167.     end
  168. end;                                                        {PadL}
  169.  
  170. function PadR(InpStr: string; FieldLen: integer): string;
  171.  
  172. var
  173.     STemp: string;
  174.     i: integer;
  175.  
  176. begin
  177.     if FieldLen >= SizeOf(InpStr) then
  178.         FieldLen := SizeOf(InpStr) - 1;
  179.     if Length(InpStr) > FieldLen then
  180.         PadR := Copy(InpStr, 1, FieldLen)
  181.     else begin
  182.         STemp := InpStr;
  183.         for i := Length(STemp) + 1 to FieldLen do
  184.             STemp := STemp + ' ';
  185.         PadR := STemp
  186.     end
  187. end;                                                        {PadR}
  188.  
  189. {$L tpdb.obj}
  190.  
  191. function Lower;
  192. external;
  193.  
  194. function Replicate;
  195. external;
  196.  
  197. function Upper;
  198. external;
  199.  
  200.  
  201. function RTrim(InpStr: string): string;
  202.  
  203. var
  204.     i: integer;
  205.  
  206. begin
  207.     i := Length(InpStr);
  208.     while (i >= 1) and (InpStr[i] = ' ') do
  209.         i := i - 1;
  210.     RTrim := Copy(InpStr, 1, i)
  211. end;                                                        {RTrim}
  212.  
  213. {$F-}
  214.  
  215. begin
  216. end.
  217.